package com.sxygsj.android.base.utils

import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import android.util.Log
import com.yanzhenjie.permission.AndPermission


/**
 * Author: sxygsj
 * Date: 2020/4/15 15:08
 * Description: 应用动态权限设置工具类
 * History:
 * <author> <time> <version> <desc>
 * 作者姓名 修改时间 版本号 描述
 */
object PermissionsUtils {
    private val checkPermission: PermissionsUtils? = null
    private const val PACKAGE_HEADER = "package:"


    /**
     * 获取权限
     *
     * @param listener
     * @param permission
     */
    @SuppressLint("WrongConstant")
    fun requestPermission(
        context: Context,
        permission: Array<String?>,
        listener: PermissionListener
    ) {
        AndPermission.with(context)
            .runtime()
            .permission(*permission) //                    .rationale(context)//添加拒绝权限回调
            .onGranted { data -> // data.get(0);
                Log.d("permission", data[0]!!)
                listener.onSuccess(context, data)
            }
            .onDenied { data ->
                /**
                 * 当用户没有允许该权限时，回调该方法
                 */
                listener.onFailed(context, data)
                /**
                 * 判断用户是否点击了禁止后不再询问，AndPermission.hasAlwaysDeniedPermission(MainActivity.this, data)
                 * 如要引导用户跳转至应该权限设置页面，可用intent
                 */
                if (AndPermission.hasAlwaysDeniedPermission(context, data)) {
                    //true，弹窗再次向用户索取权限
                    listener.onNotApply(context, data)
                }

            }.start()
    }

    /**
     * 引导用户到系统设置页面
     */
    fun GuidePermission(context: Context){
        val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
        intent.data = Uri.parse(PACKAGE_HEADER + context.packageName)
        context.startActivity(intent)

    }
    interface PermissionListener{
        fun onSuccess(context: Context,data:List<String>)
        fun onFailed(context: Context,data:List<String>)
        fun onNotApply(context: Context,data:List<String>)
    }

}